\chapter{Introducción}
\section{Propósito}
Con esta especificicación de requisitos se pretende establecer las bases para el desarrollo de una 
aplicación software cliente-servidor enfocada a la gestión integral de una empresa de comercio textil. Para ello, se utiliza 
una infraestructura consistente en un servidor central y tantos servidores locales como tiendas tenga el comercio.
En cada tienda existirá un número variable de terminales punto de venta. En otros departamentos habrá terminales no enfocados a la venta, sino a la gestión.

Esta especificación va dirigida a los desarrolladores de la aplicación.
\section{Ámbito del sistema}
El sistema a desarrollar permite gestionar los almacenes (tanto central como los de las diferentes tiendas)
de la empresa de comercio textil. La aplicación está dividida en módulos, que podrán instalarse de forma individual 
en función del uso que vaya a hacerse del terminal.
La aplicación, que llevará por nombre \textsc{Advanced Shop Manager} (en adelante, \gls{ADVSM}) presenta las 
siguientes características:

\renewcommand{\labelenumi}{\roman{enumi}.}
	\begin{enumerate}
		\item Gestionar el proceso de venta de las tiendas que implica la actualización de existencias.
		\item Permite mantener una relación actualizada de los clientes y la generación de estadísticas de venta.
		\item Optimizar el proceso de distribución (llegada de nuevas prendas, reposiciones...)
		\item Como funcionalidad opcional se presenta el módulo de personal que abarca la gestión contratos, bajas, períodos
		vacacionales...
	\end{enumerate}
Queda fuera de esta versión de la aplicación la ampliación del módulo de personal (nóminas, cotizaciones, pago de impuestos...), 
un nuevo módulo de gestión financiera para todo el grupo y el módulo de venta on-line.

La principal meta del sistema es la gestión unificada de los procesos que rodean la venta al público
en el sector textil. La aportación principal de la aplicación frente al resto de software existente en el mercado
para la administración de cadenas textiles es la denominada ``gestión de zonas calientes'', que permite conocer 
el volumen de ventas de cada zona de la tienda, que en la mayoría de establecimientos no se hace y dónde se 
hace es de forma manual.
% TODO - ¿referencias a documentos superiores?
\section{Definiciones, acrónimos y abreviaturas}
%\printglossaries
% el glosario va a ir como documento aparte.
\section{Referencias}
\begin{itemize}
\item \emph{IEEE Recommended Practice for Software Requirements Specifications}, 
Software Engineering Standards Committee of the IEEE Computer Society, 25 june 1998
\item \emph{Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal}, publicada en
el \gls{BOE} con fecha 14 de diciembre de 1999.
\item \emph{Ley 37/1992, de 28 de diciembre, del Impuesto sobre el Valor Añadido}, publicado en el \gls{BOE} con fecha
29 de diciembre de 1992.
\item \emph{Real Decreto 80/1996, de 26 de enero, por el que se modifica el reglamento del impuesto sobre el valor añadido, aprobado por el Real Decreto 1624/1992, de 29 de diciembre, y el Real Decreto 2402/1985, de 18 de diciembre}, publicado en el \gls{BOE}
con fecha 31 de enero de 1996.
\end{itemize}

\section{Resumen}
Este documento contiene las funcionalidades generales y requisitos básicos necesarios de la apliación.
No incluye referencias a ninguna implementación concreta ni a los métodos necesarios para llevarla a cabo.
Tampoco se especificará el equipo necesario para acometer el desarrollo de la aplicación.

La primera parte enmarca el contexto en el que se ejecuta la aplicación adaptada a la realidad del cliente y se detalla la perspectiva 
y objetivos de la aplicación, así como restricciones del desarrollo y uso (restricciones 
legales, físicas, de hardware, de capacitación o de implementación).

Para finalizar, la segunda parte describe los requisitos específicos de a aplicación siguiendo el modelo detallado en
el Anexo A.5 del IEEE 830-1998, que organiza los requisitos en función de la característica. Se ha escogido este modelo
por estar la aplicación dividida en cuatro grandes bloques: clientes, gestión de la tienda, personal y distribución.

\chapter{Descripción general}
\section{Perspectiva del producto}
El futuro producto software gestiona varias bases de datos (que llevan el control de inventario, el registro de clientes...) y el control de acceso de los usuarios a las mismas. No depende de ningún 
sistema mayor, puesto que en el marco de la empresa no existe. Es por tanto independiente, con un sistema modular para gestionar las diferentes áreas dentro de la empresa.
\section{Funciones del producto}
La aplicación \gls{ADVSM} está diseñada para el desepeño de forma eficiente las siguiente funciones:
	\begin{itemize}
		\item {\textbf{Ventas: }} Podrá gestionar todo el proceso de ventas desde la identificación de los artículos vendidos, su actualización en el almacén, la generación de la factura y/o
			ticket y el cobro. Como funcionalidad novedosa está la gestión de las \glspl{zonaCaliente} de las tiendas.
		\item {\textbf{Clientes: }} Mantiene actualizado una base de datos de clientes con la posibilidad de notificarles novedades y eventos de forma ágil.
		\item {\textbf{Distribución: }}Controla todo el proceso de distribución desde la recepción de la mercancía en el almacén central hasta su llegada a los almacenes de las tiendas, así como
			optimimizar el proceso de solicitud y tramitación de reposiciones.
		\item {\textbf{Personal: }}La gestión de los permisos de los usuarios del nos obliga a mantener una mínima base de datos de personal por lo que cabe la posibilidad de ampliarla y ofrecérsela 
			al cliente como un módulo más de la aplicación.
	\end{itemize}
\section{Características del usuario}
Los usuarios del sistema son en su mayoría trabajadores de las tiendas que se sitúan en una horquilla de edad 30 y 50 años, con nivel de estudios básico y amplia experiencia en el 
sector de la venta minorista. Los empleados están habituados al manejo de herramientas de asistencia a la venta de este tipo que actualmente existen en el mercado.
\section{Restricciones}
En esta sección encontramos el resto de limitaciones impuestas sobre los desarrolladores del producto.
	\renewcommand{\labelenumiii}{(\arabic{enumii})}
	\begin{enumerate}

	\item Políticas de empresa
		Los datos de carácter personal que los clientes suministren mediante nuestros formularios de registro en las tiendas,
		serán incorporados a un fichero de datos personales cuyo responsable será la empresa textil.
		La información contenida en el fichero se usará tanto para la correcta identificación de los clientes registrados que solicitan
		servicios personalizados, como para la realización de estudios estadísticos de los clientes que permitan
		aumentar las ventas del producto, diseñar mejoras en los servicios prestados a los clientes, llevar a cabo tareas básicas
		de administración y poder comunicar incidencias, ofertas o novedades a los clientes registrados.
		Nuestra política de empresa asegura, en todo caso, el ejercicio de los derechos de acceso, rectificación, cancelación,
		información de valoraciones y oposición, en los términos establecidos en la legislación vigente. Por ello, de conformidad con 
		la \gls{lopd} y en la normativa de desarrollo,
		se garantiza la adopción de las medidas necesarias para asegurar el tratamiento confidencial de dichos datos y le informa
		a los clientes de la posibilidad de ejercitar, conforme a dicha normativa, los derechos de acceso, rectificación, cancelación
		y oposición, dirigiendo un escrito.
			
	\item Limitaciones de hardware
		\begin{itemize}
		\item El servidor local requiere de un ancho de banda de 50MB/s para conectar con los terminales locales. 
			\footnote{Bajo estas condiciones, el servidor soportará hasta 10 terminales locales en puntos críticos a la vez, soportando hasta 30 terminales con ralentizaciones mínimas del sistema.}
		\item El servidor local requiere de un disco duro de al menos 500GB de capacidad. Se guardarán sobre todo imágenes y el historial de la tienda.
		\item El servidor local requiere de una conexión a internet de al menos 10Mb/s subida, 10Mb/s bajada.
		\item El servidor central requiere de al menos 5TB de capacidad útil (es decir, 5TB disponibles tras el \gls{RAID} de discos).
		\item El servidor central requiere de dos discos duros de igual capacidad en \gls{RAID} 0 para redundancia de los datos.
		\item El servidor central requiere de una conexión de al menos 100Mb/s subida, 100Mb/s bajada.
			\footnote{Bajo estas condiciones, el servidor central puede renovar 10 servidores de tiendas cada 5 minutos, siendo capaz de realizar actualizaciones simultáneas de 100 tiendas / minuto en condiciones normales.}
		\end{itemize}
	\item Lenguaje(s) de programación: Se utilizará íntegramente \Gls{java} para la aplicación y \gls{mysql} para las bases de datos.
	
	\item Protocolos de comunicación
		 \begin{itemize}
		\item El servidor local realiza un \emph{update} cada vez que se inicia (presumiblemente por la mañana) y actualiza la base de datos local y modificaciones, si las hay.
		\item El servidor local realiza un \emph{commit} cada vez que se apaga (presumiblemente por la noche) de cambios en la base de datos local. Esto permite la actulización de información en el servidor central.
		\end{itemize}

	\item Consideraciones acerca de la seguridad
		\begin{itemize}
		\item Los datos de los clientes y empleados se guardan encriptados con \gls{RSA}-1024.
		\item Las contraseñas se guardan encriptadas con \gls{RSA}-2048.
		\item Copias de seguridad periódicas cada dos semanas a un tercer disco duro de igual o mayor capacidad que el servidor central. 
		\end{itemize}
	\end{enumerate}
	


\section{Supuestos y dependencias}
	Algunos factories que pueden producir cambios en la \gls{SRS} son:
	\begin{itemize}
		\item Cambios en los equipos informáticos que posee la empresa (e.g. cambio de sistema operativo).
		\item El sistema de venta o distribución sufre cambios por parte de la empresa.
		\item El marco legal laboral cambia y entonces la funcionalidad que se encarga de contratar/gestionar el personal no se ajusta a la realidad.
		\item Cambios en las políticas de empresa (cambios en las formas de pago, en los productos que se venden...)
	\end{itemize}

\section{Requisitos futuros}
	El cliente ha manifestado que si la aplicación se ajusta y adapta a sus necesidades es bastante probable que vuelva a
	contratarnos para futuras extensiones del programa. En la que más ha hecho incapié ha sido en la gestión del personal (horarios, periodos de \gls{ILT}).
	También le hemos ofertado un módulo de gestión financiera al que el cliente no ha puesto muchos reparos.

\pagebreak
\chapter{Requisitos específicos}
\section{Interfaces externos}
\renewcommand{\labelenumii}{\roman{enumii}.}
\renewcommand{\labelenumiii}{(\arabic{enumiii})}
	\begin{description}
	\item{\textbf{Interfaces de usuario: }}  La interfaz de usuario es común para todos los miembros de la empresa, variando según el departamento los módulos instalados o accesibles. En cualquier caso, un empleado que inicie sesión en una versión de la aplicación con módulos a los que no tiene acceso seguirá teniéndolos ocultos, siendo de esta manera posible la distribución de una única compilación para toda la empresa.
	La interfaz tendrá una tasa de refresco de al menos 30 \gls{fps}, y una respuesta gráfica a eventos de teclado o ratón en menos de 0.033 segundos, para ofrecer una experiencia cómoda y fluida al usuario.
	\renewcommand{\labelenumiv}{\alph{enumiv})}
	\begin{enumerate}
		\item Todas las ventanas serán como mucho de 800px (píxeles) de ancho y 600px (píxeles) de alto, para ser completamente visibles en configuraciones gráficas que respondan a proporciones 4:3 o resolución superior.
		\item El modo pantalla completa extiende la \gls{ventana} de la aplicacion de forma proporcional a la resolución establecida en el terminal. Los formularios, cajas, ventanas y botones también amplían su tamaño con el mismo factor.
		\item Las \glspl{ventana} tendrán un tamaño mínimo que el usuario no podrá reducir (dicho tamaño será tal que todos los elementos sean totalmente visibles y operativos) para evitar malinterpretaciones de la información prestada y/o recibida por la aplicación.
		\item \Gls{ventana}: Éstas son la principal forma de interacción que el usuario tiene con la aplicación.
		\item \Gls{ventana} principal: Posee hasta 6 pestañas (Stock, Empleados, Clientes, Ventas, Gestión, y Login-Administrador) que podrán estar o no implementadas según los módulos estén presentes el terminal que estemos tratando. (e.g. la compilación para un vendedor no incluye la pestaña ``empleados'').
		Presentará el logotipo de la aplicación en la esquina superior izquierda, junto al nombre de la aplicación (\gls{ADVSM}) y la versión de compilación sobre la que se está trabajando.
		
		Además, tendrá una \gls{barraEstado} en la parte inferior de la aplicación que en todo momento indicará los siguientes datos: Tienda actual, Empleado utilizando la aplicación, Cliente con el que se está trabajando, y una \gls{barraProgreso} indicando el desarrollo de cualquier búsqueda en curso. En caso de haber múltiples búsquedas simultáneas, se mostrará el progreso de la ahora se esté ejecutando junto a un número entre paréntesis indicando la cantidad de búsquedas en cola / realizándose simultáneamente.
		Por supuesto, estos campos son susceptibles de aparecer o no según qué permisos tenga el empleado con sesión iniciada.
		
		A continuación se detallan las diferentes pestañas que aparecen en la ventana principal. Asumimos que ésta es una distribución con todos los módulos accesibles.
			\begin{itemize}
			\item Pestaña \emph{Stock}: Incorpora un buscador de productos por nombre, así como dos listas: Una primera que muestra los tipos de prenda resultados de la búsqueda, y otra que muestra los ítems de un tipo concreto de los seleccionados en la lista anterior. Además incorpora un botón que enlaza al formulario de ``Búsqueda avanzada'', otro que enlaza al formulario de ``Añadir nuevo producto'', un tercero que enlaza al formulario ``Solicitar reposición'', así como los campos necesarios para poder editar productos sin abrir un nuevo formulario.
			\item Pestaña \emph{Empleados}: Incorpora un buscador de empleados por nombre, puesto, departamento o tienda, una lista de los empleados resultado de la búsqueda, una ficha que muestra toda la información sobre un empleado seleccionado de la lista anterior, así como tres botones: Uno para edición del empleado, que se realiza sobre el mismo formulario, otro para añadir empleado, que abre el formulario ``Nuevo empleado'', y un último para borrar el empleado seleccionado en la lista.
			\item Pestaña \emph{Clientes}: Incorpora un buscador de clientes por nombre, una lista donde mostrar los resultados de la búsqueda, y una ficha del cliente que muestra todos sus datos, una lista de las últimas compras realizadas, e imágenes de dichas compras en un cuadro a parte. Además, aparecen de nuevo tres botones: Uno para edición del cliente, que se realiza sobre el mismo formulario, otro para dar de baja al cliente seleccionado de la lista, y otro para añadir un nuevo cliente, que lanza el formulario de ``Nuevo cliente''.
			\item Pestaña \emph{Ventas}: Permite tanto la realización de una venta como la consulta de otra previas. Para la venta, hay una sección donde se encuentran todos los campos necesarios en su realización, asi como un botón para realizar la venta. En cuanto al historial, se encuentra en otra sección que contiene un buscador por vendedor, cliente, prenda, y/o fecha, así como una lista con todas las ventas resultado de la búsqueda.
			\item Pestaña \emph{Gestión de tienda}: Incorpora información de la tienda actual (nombre, dirección, teléfono, email y una pequeña descripción), un mapa de la tienda editable (con imágenes de los distintos elementos existentes en el local (e.g.: estanterías, burros...)), un \gls{desplegable} con los diferentes elementos disponibles, y un panel informativo de la zona elegida en el mapa. Éste mostrará dos listas: Una con los productos vendidos en la zona, otra con los clientes que compran en esa zona, así como algunas estadísticas que incluyen, al menos, volumen de ventas anuales, edad media del comprador y gasto medio del comprador.
			Por último, también está disponible la opción de crear tienda, que abre el formulario ``Nueva tienda''
			\end{itemize}
		\item \Gls{ventana} \emph{Añadir nuevo producto}: Presenta los campos necesarios para añadir un nuevo producto: (Prenda, tipo, nombre, año, temporada, diseñador, precio, talla(s), zona(s) de la tienda donde se encuentra). Posee un \gls{cuadroImagen} desde donde se abre un diálogo de sistema para agregar una imagen representativa del producto. Por último, un botón de ``Terminar'' que devuelve el control al formulario principal.
		\item \Gls{ventana} \emph{Nuevo empleado}: Presenta los siguientes campos de información sobre el nuevo empleado: (Nombre, puesto, departamento, tienda, edad, sueldo). Posee un \gls{cuadroImagen} que abre un diálogo de sistema para agregar una imagen representativa del producto. Por último, un botón de ``Terminar'' que devuelve el \gls{foco} a la \gls{ventana} principal.
		\item \Gls{ventana} \emph{Nuevo cliente}: Presenta los siguientes campos de información sobre el nuevo cliente: Nombre, edad, talla, teléfono e email. Por último, un botón de ``Terminar'' que devuelve el \gls{foco} a la \gls{ventana} principal.
		\item \Gls{ventana} \emph{Búsqueda avanzada}:  Presenta los siguientes campos a rellenar opcionalmente para filtrar más o menos en profundidad la búsqueda: Diseñador, temporada, año, talla(s) y dos cuadros numéricos que indican el intervalo de precio a buscar. Por último un botón buscar devuelve la información y el \gls{foco} a la \gls{ventana} principal.
		\item \Gls{ventana} \emph{Reposiciones}: Incorpora los siguientes campos: Referencia de prenda, fecha de pedido, número de pedido (autogenerado), cantidad(es) y talla(s), y un \gls{desplegable} que indica la prioridad del pedido (alta, media o baja). Por último un botón para efectuar el pedido que devuelve el \gls{foco} a la \gls{ventana} principal.
		\item \Gls{ventana} \emph{Nueva tienda}: Posee los siguientes campos: Nombre de la tienda, situación, teléfono, email, y detalles varios que se quieran aportar. Un botón para terminar la creación devuelve el \gls{foco} a la \gls{ventana} principal.
		\end{enumerate}
	\item{\textbf{Interfaces de hardware: }}
		\begin{enumerate}
		\item La aplicación incorpora el controlador para interactuar siguiendo el protocolo \gls{LAN} para conectarse al servidor local tras realizar cualquier cambio susceptible de ser actualizado en la base de datos.
		\end{enumerate}
	\item{\textbf{Interfaces de software: }}
		\begin{enumerate}
		\item Interfaz de cuadros de diálogo de selección de archivo de Windows: La aplicación debe ser capaz de interactuar con los cuadros de diálogo de Windows para seleccionar archivos.
		\end{enumerate}
	\item{\textbf{Interfaces de comunicación: }} 
		\begin{enumerate}
		\item Interfaz de teclado: La aplicación debe ser capaz de responder ante eventos de teclado al menos cuando el control está fijado sobre un \gls{cuadroTexto}.
		\item Interfaz de ratón: La aplicación debe ser capaz de responder ante eventos de ratón, centrando el control de la aplicación en el elemento sobre el cual se realiza click.
		\item Interfaz mixta teclado-ratón: La aplicación debe ser capaz de ofrecer respuesta a combinaciones de teclas junto a clicks del ratón sobre la aplicación.
		\item Interfaz de impresora: La aplicación debe ser capaz de conectarse a una impresora con las que obtener las facturas para los clientes que así lo deseen.
		\end{enumerate}
\end{description}
\section{Funciones}
		\begin{enumerate}
			\item \label{req:iniciarSesion}Requisito~\ref{req:iniciarSesion}: Iniciar sesión
				\begin{itemize}
					\item Descripción: Poder identificar al usuario de forma unívoca en la aplicación para registrar a su nombre los cambios que se realizcen en la sesión.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Nombre y contraseña de usuario en los \glspl{cuadroTexto} de la pestaña de login
					\item Salida: Información sobre si el inicio de sesión se ha realzado correctamente o no
					\item Origen: \Glspl{cuadroTexto} del programa, botón ``iniciar sesión'' o tecla ``enter'' cuando el \gls{foco}de la aplicación está fijado en los \glspl{cuadroTexto} ``usuario'' o ``contraseña''.
					\item Destino: Sistema
					\item Necesita: Base de datos de empleados.
					\item Acción: Inicio de sesión de un empleado
					\item Precondición: Empleado trabaja en la tienda desde donde se realiza el inicio de sesión, el servidor local está iniciado y operativo.
					\item Postcondición: Empleado con sesión iniciada
					\item Efectos laterales:
						\begin{enumerate}
							\item Bloqueo del sistema tras 5 intentos fallidos de inicio de sesión durante 5 minutos.
							\item Reseteo de contraseña al solicitar nueva contraseña por olvido de la misma.
						\end{enumerate}
				\end{itemize}
			\item \label{req:centralLocal}Requisito~\ref{req:centralLocal}: Sincronización de dominio central con locales.
				\begin{itemize}
					\item Descripción: Las bases de datos locales mandan al dominio central los cambios registrados desde la última sincronización.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Últimos cambios.
					\item Salida: Dominio central sincronizado con los datos de los dominios locales.
					\item Origen: Si la sincronización es automática, a la hora de cierre de tienda. Si es manual, cuando el mánager decida.
					\item Destino: Dominio central.
					\item Necesita: Conexión entre los dominios locales y el central.
					\item Acción: Actualización del dominio central.
					\item Precondición: Haber realizado cambios en la base de datos local. Tener conexión establecida entre los dominios.
					\item Postcondición: La base de datos principal se actualiza con los nuevos datos recibidos.
				\end{itemize}
			\item \label{req:localCentral}Requisito~\ref{req:localCentral}: Sincronización de dominios locales con central.
				\begin{itemize}
					\item Descripción: Los dominios locales se conectan con la base de datos central y sincronizan sus datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Datos del dominio central.
					\item Salida: Dominios locales sincronizados con el central.
					\item Origen: Si la sincronización es automática, a la hora de apertura de tienda. Si es manual, cuando el mánager decida.
					\item Destino: Dominios locales.
					\item Necesita: Conexión entre los dominios locales y el central.
					\item Acción: Sincronización entre dominios con el dominio central.
					\item Precondición: Tener conexión establecida entre los dominios.
					\item Postcondición: Los dominios locales se sincronizan con los nuevos datos recibidos.
				\end{itemize}
			\item \label{req:reestablecerContrasenia}Requisito~\ref{req:reestablecerContrasenia}: Reestablecer contraseña %%%%%%%%%%%%%	POR AQUI!!!!!
				\begin{itemize}
					\item Descripción: Un empleado reestablece la contraseña bien por seguridad o bien por no acordarse de la que tenía
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Nueva contraseña
					\item Salida: Mensaje verificando si se ha podido realizar el cambio
					\item Origen: RRHH recibe la petición del cambio de contraseña y genera una temporal para que el usuario la cambie desde el menú ``cambiar contraseña'' que aparece en la \gls{ventana} de login.
					\item Destino: Empleado en la base de datos.
					\item Necesita: Empleado en la base de datos.
					\item Acción: Actualiza la contraseña del empleado en cuestión.
					\item Precondición: Empleado registrado en la aplicación.
					\item Postcondición: Empleado con nueva contraseña.
					\item Efectos laterales:
				\end{itemize}
			\item \label{req:agregarClientes}Requisito~\ref{req:agregarClientes}: Agregar clientes a la aplicación.
				\begin{itemize}
					\item Descripción: Actualizar la base de datos con nuevos clientes que deseen estar registrados en la misma.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: \Glspl{cuadroTexto} de el apartado ``clientes'' de la aplicación
					\item Salida: Información sobre si el alta de cliente se ha realizado correctamente o no.
					\item Origen: \Glspl{cuadroTexto} del programa, botón ``agregar cliente'' o tecla ``intro'' con el \gls{foco} de la aplicación en el formulario de ``agregar cliente'', siempre y cuando los campos obligatorios se hayan rellenado. 
					\item Destino: Base de datos
					\item Necesita: Base de datos
					\item Acción: Dar de alta al cliente.
					\item Precondición: Vendedor con sesión iniciada en la aplicación. Cliente dispuesto a ser registrado en la base de datos.
					\item Postcondición: Cliente registrado en la base de datos.
					\item Efectos laterales:
						\begin{enumerate}
							\item En caso de fallo, el cliente queda apuntado manualmente para una posterior adición de su información a la base de datos.
						\end{enumerate}
				\end{itemize}
			\item \label{req:eliminarClientes}Requisito~\ref{req:eliminarClientes}:  Eliminar clientes de la aplicación.
				\begin{itemize}
					\item Descripción: Elimina los datos personales de un cliente manteniendo los datos de compras en una nueva ficha utilizada únicamente con fines estadísticos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Selección sobre la lista de clientes del cliente que debe ser eliminado.
					\item Salida: Información sobre si se ha podido realizar la eliminación o no.
					\item Origen: Botón ``eliminar cliente'' de la pestaña de clientes, o tecla ``suprimir'' con el \gls{foco} de la aplicación sobre un cliente de la lista de clientes.
					\item Destino: Base de datos.
					\item Necesita: Base de datos.
					\item Acción: Eliminación de los datos protegidos por la ley de protección de datos de un cliente.
					\item Precondición: \Gls{manager} con sesión iniciada en la aplicación. El cliente ha pedido su eliminación de la base de datos.
					\item Postcondición: Información protegida del cliente eliminada. La información estadística se guardará en un modelo de cliente genérico. (\gls{clienteNoNominativo}).
					\item Efectos laterales:
						\begin{enumerate}
							\item Puesta en cola de la petición de eliminación si fallara la conexión o actualización de la base de datos.
						\end{enumerate}
				\end{itemize}
			\item \label{req:eliminarDuplicados}Requisito~\ref{req:eliminarDuplicados}: Eliminar clientes duplicados de la base de datos.
				\begin{itemize}
					\item Descripción: Se eliminan datos repetidos o mal clasificados de la base de datos. Por la construcción de ésta, ésto solo ocurre cuando un cliente se da de alta con nombres diferentes, que será el caso a tratar aquí.
					\item Prioridad: Baja
					\item Estabilidad: Media
					\item Entrada: Dos clientes diferentes seleccionados entre los disponibles en la pestaña ``clientes'' de la aplicación.
					\item Salida: Un único cliente mezcla de los dos anteriores.
					\item Origen:  Botón ``unir clientes'' de la aplicación.
					\item Destino: Base de datos.
					\item Necesita: Base de datos.
					\item Acción:  Fusión de los datos de ambos clientes en uno solo. La información que posean los dos será unida manualmente por el usuario.
					\item Precondición: Mánager con sesión inciada en la aplicación. Se ha detectado una redundancia en la base de datos.
					\item Postcondición: Un único cliente queda en la base de datos, eliminando por completo los dos primeros. Dicho cliente contendrá la información de ventas de los dos, y una unión del resto de información realizada por el usuario.
					\item Efectos laterales:
						\begin{enumerate}
							\item Puesta en cola de la petición de eliminación si fallara la conexión o actualización de la base de datos.
						\end{enumerate}
				\end{itemize}
			\item \label{req:modificarCliente}Requisito~\ref{req:modificarCliente}: Modificar datos de cliente.
				\begin{itemize}
					\item Descripción: Se modifican datos de un cliente determinado, bien por petición suya, bien automáticamente desde el programa. (P.ej: al realizar una venta se actualizarán sus compras).
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Petición de modificación de cliente por parte del programa o del usuario.
					\item Salida: El cliente se queda guardado en la base de datos con su nueva información.
					\item Origen: Petición del programa (por ejemplo por venta) o \glspl{cuadroTexto} de la aplicación
					\item Destino: Base de datos
					\item Necesita: Un cliente que modificar
					\item Acción: Modificación de datos de cliente
					\item Precondición: El cliente existe en la base de datos
					\item Postcondición: Se actualiza la información del cliente en la base de datos. A partir de ahora al acceder dicho cliente se verá la nueva información.
				\end{itemize}
			\item \label{req:notificarNovedades}Requisito~\ref{req:notificarNovedades}: Notificar de novedades y eventos a clientes
				\begin{itemize}
					\item Descripción: Manda un email informativo sobre novedades a los clientes que desearon recibirlo
					\item Prioridad: Media
					\item Estabilidad: Alta
					\item Entrada: Lista de clientes que desean recibir información 
					\item Salida: Información sobre los envíos a cada cliente (éxito o fallo de los envíos)
					\item Origen: El dpto de Comercial y Márketing carga un newsletter en el formulario de ``Enviar newsletter'' desde la pestaña clientes.
					\item Destino: Servidor central, que se encargará de enviar los mensajes a nombre de la empresa.
					\item Necesita: Archivo adjunto a enviar, lista de emails a donde enviarlo.
					\item Acción: Envío de emails con archivo adjunto a los clientes que desean recibirlo
					\item Precondición: El servidor central debe estar operativo, y se necesita conexión a base de datos local para extraer asi la lista de clientes.
					\item Postcondición: Los emails son enviados a sus correspondientes destinatarios.
					\item Efectos laterales:
						\begin{enumerate}
							\item El usuario es quitado de la lista de envíos si responde al email desde el enlace ``No deseo volver a recibir información sobre novedades y eventos''.
						\end{enumerate}
				\end{itemize}
			\item \label{req:generarEstisiticas}Requisito~\ref{req:generarEstadisticas}: Generar estadísticas sobre las compras de clientes.
				\begin{itemize}
					\item Descripción: Se genera información a partir de los datos de compras de clientes sobre las ventas en un determinado rango de características.
					\item Prioridad: Media
					\item Estabilidad: Media
					\item Entrada: Rangos de las características que se quieren utilizar para filtrar la busqueda
					\item Salida: Gráficas y datos generados sobre las ventas que se buscaron.
					\item Origen: Desplegables y \glspl{cuadroTexto} del programa en la pestaña ``Estadísticas''
					\item Destino: Formulario de gráficas y datos de la aplicación
					\item Necesita: Base de datos de ventas
					\item Acción: Muestra las estadísticas de ventas en el formulario de gráficas y datos.
					\item Precondición: Usuario de Comercial y Márketing con sesión iniciada que solicita una búsqueda de datos.
					\item Postcondición: Resultado de la búsqueda mostrado en pantalla.
				\end{itemize}
			\item \label{req:accesoBaseDatos}Requisito~\ref{req:accesoBaseDatos}: Acceder a datos de la base de datos
				\begin{itemize}
					\item Descripción: Se accede a un item de la base de datos (cliente, prenda, empleado, tienda) y se muestra su información en la correspondiente \gls{ventana}.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Selección en las listas de datos del programa (lista clientes, lista prendas...) 
					\item Salida: \Glspl{cuadroTexto} del item correspondiente se llenan con la información correspondiente.
					\item Origen: Cambio de índice en las listas de datos del programa (se actualiza la información automáticamente al seleccionar un ítem distinto en las listas.
					\item Destino: \Glspl{cuadroTexto} de la aplicación
					\item Necesita: Conexión con la base de datos
					\item Acción: Mostrar la información de un item de la base de datos.
					\item Precondición: El ítem existe en la base de datos y ha sido seleccionado mediante una de las listas del programa.
					\item Postcondición: Aparece la información en la pantalla
				\end{itemize}
			\item \label{req:altaInventarioLocal}Requisito~\ref{req:altaInventarioLocal}: Dar de alta prendas en el almacén de la tienda
				\begin{itemize}
					\item Descripción: Agrega a la base de datos del almacén de la tienda las nuevas adquisiciones
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Qué elemento se da de alta, cantidad y características que requiera la aplicación. (talla, tipo entre otros).
					\item Salida: Mensaje si se ha podido actualizar la base de datos con el nuevo elemento.
					\item Origen: Formulario ``añadir stock''
					\item Destino: Base de datos.
					\item Necesita: Base da datos para comprobar que el elemento no esté ya repetido
					\item Acción: Actualiza la base de datos con lo introducido en el formulario.
					\item Precondición: Conexión con la base de datos abierta, mánager con sesión iniciada.
					\item Postcondición: Se actualizan los datos de del almacén
				\end{itemize}
			\item \label{req:bajaInventarioLocal}Requisito~\ref{req:bajaInventarioLocal}: Dar de baja elementos en el almacén de la tienda
				\begin{itemize}
					\item Descripción: Quita elementos del almacén de la tienda registrados en la base de datos
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Ítem a eliminar de la base de datos
					\item Salida: Mensaje informando sobre si se ha podido realizar la acción.
					\item Origen: Botón ``eliminar'' o tecla ``suprimir'' con el \gls{foco} de la aplicación centrado en un item de la lista de productos del almacén.
					\item Destino: Base de datos
					\item Necesita: Conexión con la base de datos e item seleccionado en la lista de stock del almacén.
					\item Acción: Eliminar un elemento de la lista de stock del almacén de la base de datos
					\item Precondición: Conexión con la base de datos abierta, mánager con sesión iniciada.
					\item Postcondición: Se actualizan los datos de del almacén
				\end{itemize}
			\item \label{req:modificarInventarioLocal}Requisito~\ref{req:modificarInventarioLocal}: Modificar inventario
				\begin{itemize}
					\item Descripción: Modifica datos sobre los elementos del almacén de la tienda
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Datos a cambiar sobre un elemento del almacén
					\item Salida: Mensaje indicando el éxito o fracaso de la operación
					\item Origen: Formulario de modificación de stock del almacén
					\item Destino: Base de datos
					\item Necesita: Base de datos de elementos del almacén
					\item Acción: Actualiza la base de datos con la nueva información
					\item Precondición: 	Vendedor con sesión iniciada, conexión a la base de datos establecida
					\item Postcondición: Base de datos actualizada
				\end{itemize}
			\item \label{req:mostrarInventario}Requisito~\ref{req:mostrarInventario}: Mostrar inventario
				\begin{itemize}
					\item Descripción: Genera un listado con los artículos que se tiene en la tienda
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Petición de realizar inventario
					\item Salida: Lista con los artículos que tiene la tienda
					\item Origen: Botón de realizar inventario
					\item Destino: Lista de stock en la pestaña ``stock''
					\item Necesita: Conexión con la base de datos
					\item Acción: Muestra el listado de artículos que se tiene en la tienda en la lista de stock de la pestañá ``stock''
					\item Precondición: Vendedor con sesión iniciada
				\end{itemize}
			\item \label{req:vender}Requisito~\ref{req:vender}: Vender
				\begin{itemize}
					\item Descripción: Realizar una venta a un cliente
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Cliente que compra, Vendedor que realiza la venta, productos involucrados en la transacción.
					\item Salida: Información de venta autogenerada por el sistema
					\item Origen: Cliente seleccionado en la pestaña ``clientes'', vendedor con sesión iniciada, productos seleccionados en la pestaña ``stock''.
					\item Destino: Base de datos de ventas
					\item Necesita: Conexión con la base de datos
					\item Acción: Genera y guarda en la base de datos de ventas una nueva venta
					\item Precondición: Vendedor con sesión iniciada, productos a vender seleccionados con stock suficiente para la transacción
					\item Postcondición: Se actualizan las ventas realizadas por el vendedor, las compras realizadas por el cliente, y el stock de los elementos involucrados en la trasacción.
					\item Efectos laterales:
						\begin{enumerate}
							\item Si el cliente no está registrado en la base de datos, la compra se anotará a cargo de \Gls{clienteNoNominativo}
						\end{enumerate}
				\end{itemize}
			\item \label{req:pagarEfectivo}Requisito~\ref{req:pagarEfectivo}: Pagar en efectivo
				\begin{itemize}
					\item Descripción: Admitir un pago en efectivo de un cliente
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Cantidad que el cliente aporta para la compra
					\item Salida: Diferencia entre la cantidad aportada y el coste. Ticket autogenerado
					\item Origen: Formulario de ``realizar venta''
					\item Destino: Impresora
					\item Necesita: Conexión con base de datos *
					\item Acción: Pago por parte del cliente al establecimiento
					\item Precondición: Cantidad aportada por el cliente en la caja
					\item Postcondición: Diferencia entre la aportación y el coste en manos del cliente
					\item Efectos laterales:
						\begin{enumerate}
							\item *Los datos generados para la base de datos se quedan en cola si no se tiene conexión con la misma, y se realiza la actualización posteriormente.
						\end{enumerate}
				\end{itemize}
			\item \label{req:pagarTarjeta}Requisito~\ref{req:pagarTarjeta}: Pagar con tarjeta
				\begin{itemize}
					\item Descripción: Admitir un pago mediante tarjeta de un cliente
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Coste de los productos a comprar
					\item Salida: Ticket autogenerado
					\item Origen: Formulario de ``realizar venta''
					\item Origen: Formulario de ``realizar venta''
					\item Destino: Impresora
					\item Necesita: Conexión con base de datos de la tienda*, conexión con base de datos del banco de donde procede la tarjeta.
					\item Acción: Pago por parte del cliente al establecimiento
					\item Precondición: El cliente posee suficiente dinero en la tarjeta.
					\item Postcondición: La transacción es enviada al banco para que el coste sea sustraído de la tarjeta del cliente y aportado a la cuenta de la empresa
					\item Efectos laterales:
						\begin{enumerate}
							\item *Los datos generados para la base de datos se quedan en cola si no se tiene conexión con la misma, y se realiza la actualización posteriormente.
							\item El pago no se realiza si no se consigue conexión con el banco.
						\end{enumerate}
				\end{itemize}
			\item \label{req:pagarVale}Requisito~\ref{req:pagarVale}: Pagar mediante vale
				\begin{itemize}
					\item Descripción: Admitir un pago mediante vale de un cliente
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Código del vale
					\item Salida: Diferencia entre la cantidad aportada y el coste. Ticket autogenerado
					\item Origen: Formulario de ``realizar venta''
					\item Destino: Impresora
					\item Necesita: Conexión con base de datos *
					\item Acción: Pago por parte del cliente al establecimiento
					\item Precondición: El vale entregado no está caducado ni canjeado
					\item Postcondición: El vale se marca como canjeado
					\item Efectos laterales:
						\begin{enumerate}
							\item *Los datos generados para la base de datos se quedan en cola si no se tiene conexión con la misma, y se realiza la actualización posteriormente.
							\item En caso de ser de mayor valor el vale que la compra, se genera un nuevo vale por valor la diferencia entre el valor del primero y el coste de compra
							\item En caso de ser de menor valor el vale que la compra, se generará una nueva transacción por valor la diferencia entre el coste y el valor del vale, que deberá ser abonada siguiendo uno de los métodos de pago disponibles.
						\end{enumerate}
				\end{itemize}
			\item \label{req:imprimirFactura}Requisito~\ref{req:imprimirFactura}: Imprimir factura
				\begin{itemize}
					\item Descripción: Imprimir la factura generada por la compra para entregársela al cliente.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: El interés del cliente de conservar la factura de la compra
					\item Salida: Factura impresa con los datos de la compra 
					\item Origen: Botón ``imprimir factura''
					\item Destino: Impresora
					\item Necesita: Imprimirse en el momento de la compra
					\item Acción: Impresión de la factura correspondiente auna compra y su entrega al cliente
					\item Precondición: El cliente comunica que desea conservar la factura
					\item Postcondición: Factura impresa
				\end{itemize}
			\item \label{req:consultarVentasTienda}Requisito~\ref{req:consultarVentasTienda}: Consulta de ventas en tienda
				\begin{itemize}
					\item Descripción: Mostrar información relativa a las ventas de una tienda específica. Información que puede ser consultada: Distribución de ventas por talla, edad, tipo de prenda; ventas por meses, ventas por temporada, ventas superiores a una cantidad de dinero, día de la semana cuando se realizan más ventas, hora del dñia cuando más ventas se llevan a cabo.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Parámetros que se quieren utilizar para filtrar la información
					\item Salida: Datos solicitados relativos a las ventas de la tienda 
					\item Origen: Desplegables y \glspl{cuadroTexto} del programa en la pestaña ``Ventas''
					\item Destino: \Glspl{cuadroTexto} en la aplicación
					\item Necesita: Conexión con base de datos
					\item Acción: Dar a conocer los datos relativos a las ventas requeridos por el mánager
					\item Precondición: El \gls{manager} de la tienda con sesión iniciada que solicita una búsqueda de datos.
					\item Postcondición: Se muestran los datos pedidos con relación a las ventas
				\end{itemize}

			\item \label{req:consultaVentasGeneral}Requisito~\ref{req:consultarVentasGeneral}: Consulta general de ventas
				\begin{itemize}
					\item Descripción: Mostrar información de ventas realizadas a nivel de un zona concreta, tanto a nivel de área, como nacional o internacional. Puede ser realizada por vendedores con permisos mayores o iguales que Área manager y personal del Dpto. Comercial y Marketing.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Parámetros que se quieren utilizar para filtrar la información
					\item Salida: Datos solicitados relativos a las ventas de la tienda 
					\item Origen: Desplegables y \glspl{cuadroTexto} del programa en la pestaña ``Ventas''
					\item Destino: \Glspl{cuadroTexto} en la aplicación
					\item Necesita: Conexión con base de datos
					\item Acción: Dar a conocer los datos relativos a las ventas requeridos por el mánager
					\item Precondición: El empleado con los permisos necesarios ha iniciado sesión y solicita una búsqueda de datos.
					\item Postcondición: Se muestran los datos pedidos con relación a las ventas correspondientes a la zona indicada.
				\end{itemize}

			\item \label{req:solicitarReposiciones}Requisito~\ref{req:solicitarReposiciones}: Solicitar reposiciones
				\begin{itemize}
					\item Descripción: El vendedor solicita la reposición de alguna prenda, esta solicitud se enviará al Dpto. Comercial y Marketing cuando se haga el intercambio de datos entre el servidor local y el central.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Código de prenda
					\item Salida: Mensaje de solicitud pendiente de enviar.
					\item Origen: \Gls{cuadroTexto} del programa, botón ``solicitar reposición'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Cola pendiente de sincronizar con el servidor central
					\item Necesita: Base de datos local y transferencia de información de ésta al servidor central al final del día.
					\item Acción: Gestionar la reposición de prendas en la teinda.
					\item Precondición:  Vendedor con sesión iniciada y código de la prenda.
					\item Postcondición: Petición al sitema de la reposición de las prendas en espera.
				\end{itemize}

			\item \label{req:tramitarReposicion}Requisito~\ref{req:tramitarReposicion}: Tramitar reposición
				\begin{itemize}
					\item Descripción: La solicitud de reponer alguna prenda enviada por una tienda es procesada en el Dpto. Comercial y Marketing. Se comprueba la disponibilidad de la prenda en los distintos almacenes y se procede a su envío. Las prendas enviadas a la tienda pueden provenir tanto del almacen central como de otra tienda.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Tienda solicitante, código de la prenda.
					\item Salida: Orden de envío de las reposiciones si se encuentran disponibles
					\item Origen: Mensaje de solicitud de reposiciones enviado por una tienda.
					\item Destino: Dos posibles respuestas que dependen de la disponibilidad de las prendas que se piden, se envían las reposiciones o bien, no hay envío y se informa a la tienda solicitante.
					\item Necesita: Base de datos
					\item Acción: Buscar la disponibilidad de una prenda para enviarla a una tienda que ha solicitado su reposición
					\item Precondición: El empleado del Dpto. Comercial debe haber iniciado sesión previamente, se ha recibido una solicitud de reposición.
					\item Postcondición: Envío de las reposiciones a la tienda que las solicitó.
					\item Efectos laterales:
						\begin{enumerate}
							\item No se encuentran prendas disponibles en otros almacenes y se informa a la tienda que su solicitud ha sido denegada.
						\end{enumerate}
				\end{itemize}

			\item \label{req:hacerDevolucion}Requisito~\ref{req:hacerDevolucion}: Hacer devolución
				\begin{itemize}
					\item Descripción: Registrar nuevamente una prenda que fue vendida. Al cliente en cuestión se le concede un crédito con el valor de la prenda, este crédito se genera en forma de vale para ser canjeado en un plazo de 30 días naturales.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Cliente, una prenda con su etiqueta comprada anteriormente y ticket de esa compra.
					\item Salida: Vale con el valor de la prenda devuelta y caducidad de 30 días
					\item Origen: Cliente seleccionado en la pestaña ``clientes''*, y formulario de ``modificar inventario'' y lectura del código de la prenda
					\item Destino: Base de datos, impresora
					\item Necesita: Conexión con la base de datos
					\item Acción: Da de baja la prenda en las compras realizadas por el cliente y de alta en el inventario de la tienda. Se genera un vale para el cliente con el valor de la prenda devuelta.
					\item Precondición: El vendedor tiene sesión iniciada, se tiene la prenda en buen estado, con su etiquetay el ticket de compra.
					\item Postcondición: La prenda queda registrada en el inventario y retirada de la lista de compras del cliente, y se genera un vale.
					\item Efectos laterales:
						\begin{enumerate}
							\item *Si el cliente no está registrado en la base de datos, la operación se realizará con \gls{clienteNoNominativo}.
							\item Si el código no se ha podido leer, se introduce a mano.
						\end{enumerate}
				\end{itemize}

			\item \label{req:modificarVisual}Requisito~\ref{req:modificarVisual}: Modificar visual de la tienda 
				\begin{itemize}
					\item Descripción: Mantener actualizada en la base de datos la distribución de artículos en la tienda. También se pueden obtener sugerencias del programa.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Artículos que se ubicarán por primera vez en la tienda o serán reubicados, y las zonas de la tienda donde pueden ser colocados.
					\item Salida: Nueva distribución guardada
					\item Origen: Pestaña ``modificar \gls{visual}'' de la aplicación
					\item Destino: Base de datos
					\item Necesita: Conexión con la base de datos
					\item Acción: Modificar la distribución de los artículos guardada en la base de datos.
					\item Precondición: El \gls{manager} tiene su sesión iniciada y ya se ha cambiado la distribución física de la tienda.
					\item Postcondición: La nueva distribución queda guardada en la base de datos.
				\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%REQUISITOS DE PERSONAL%%%%%%%%%%%%%%

\item \label{req:altaPersonal}Requisito~\ref{req:altaPersonal}: Dar de alta empleado
				\begin{itemize}
					\item Descripción: Poder registrar un empleado en la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Datos personales(nombre, apellidos, \gls{NIF}, fecha de nacimiento, correo electrónico, dirección, CP, número de la seguridad social, grado de discapacidad, datos bancarios), datos de contrato (tipo de contrato, fecha de finalización) y observaciones adicionales.
					\item Salida: Información sobre si el empleado se ha dado de alta correctamente.
					\item Origen: \Glspl{cuadroTexto} del programa, botón ``registrar empleado'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en uno de los \glspl{cuadroTexto} (deben estar todos completados correctamente para registrar al empleado).
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Registrar un empleado en el sistema.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: El nuevo empleado queda registrado correctamente en el sistema.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si algún dato no se ha introducido o es erróneo.
						\end{enumerate}
				\end{itemize}


	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	
		\item \label{req:bajaEmpleado}Requisito~\ref{req:bajaEmpleado}: Dar de baja a un empleado
				\begin{itemize}
					\item Descripción: Poder eliminar un empleado del sistema (lo desactiva, no lo elimina).
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: \gls{NIF} del empleado.
					\item Salida: Información sobre si el empleado se ha dado de baja correctamente o no
					\item Origen: \Gls{cuadroTexto} del programa (para el código), botón ``dar de baja'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Dar de baja a un empleado.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: Se ha dado de baja al empleado correctamente.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el \gls{NIF} introducido es erróneo o no existe en la base de datos, o si el empleado no ha podido darse de baja.
						\end{enumerate}
				\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\item \label{req:eliminarPersonal}Requisito~\ref{req:eliminarPersonal}: Eliminar personal
				\begin{itemize}
					\item Descripción: Poder eliminar los datos de un empleado en la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: \gls{NIF} del empleado.
					\item Salida: Información sobre si el empleado se ha eliminado correctamente o no
					\item Origen: \Gls{cuadroTexto} del programa (para el \gls{NIF}); botón ``modificar empleado'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Eliminar un empleado.
					\item Precondición: El empleado en cuestión debe haber solicitado la eliminación de sus datos de la base de datos, y no haber sido ya eliminado.
					\item Postcondición: El empleado queda eliminado en la base de datos. 
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el \gls{NIF} introducido es erróneo o no existe, o si los datos del empleado no se han podido modificar correctamente.
						\end{enumerate}
				\end{itemize}		

\item \label{req:consultarPersonal}Requisito~\ref{req:consultarPersonal}: Consultar personal
				\begin{itemize}
					\item Descripción: Poder consultar los datos de un empleado de la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: \gls{NIF} del empleado.
					\item Salida: Datos del empleado (sólo si el empleado a consultar está por debajo del ejecutor en la cadena de mando).					
					\item Origen: \Gls{cuadroTexto} del programa (para el \gls{NIF}), botón ``consultar empleado'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Consultar datos de un empleado de la base de datos.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: Se muestran los datos del empleado por pantalla.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el \gls{NIF} introducido es erróneo o no existe, o si el empleado no se ha podido encontrar o mostrar correctamente.
						\end{enumerate}
				\end{itemize}		
				
		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		%%%REQUISITOS DE ALMACEN CENTRAL%%%
		\item \label{req:altaAlmacenCentral}Requisito~\ref{req:altaAlmacenCentral}: Dar de alta en almacén central
				\begin{itemize}
					\item Descripción: Poder registrar las nuevas prendas que sean recibidas en la tienda por la nueva temporada.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Nombre , color (número hexadecimal de 4 dígitos), composición, precio, código de prenda (se puede introducir a mano, o bien escanearlo con el lector de código de barras), calidad (número decimal de 7 dígitos), tallas y número de prendas por talla recibidas.
					\item Salida: Información sobre si la prenda se ha registrado correctamente o no
					\item Origen: \Glspl{cuadroTexto} del programa, botón ``registrar prenda'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en uno de los \glspl{cuadroTexto} (deben estar todos completados correctamente para registrar la prenda).
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Registrar una prenda en el almacén central.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: La prenda queda registrada en el almacén central, y se genera su etiqueta.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si algún dato no se ha introducido o es erróneo.
						\end{enumerate}
				\end{itemize}

	
		\item \label{req:bajaAlmacenCentral}Requisito~\ref{req:bajaAlmacenCentral}: Dar de baja en almacén central
				\begin{itemize}
					\item Descripción: Poder eliminar una prenda de la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Código de prenda.
					\item Salida: Información sobre si la prenda se ha eliminado correctamente o no
					\item Origen: \Gls{cuadroTexto} del programa (para el código), botón ``eliminar prenda'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Eliminar una prenda en el almacén central.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: La prenda queda eliminada del almacén central.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el código introducido es erróneo o si la prenda no se ha podido eliminar correctamente.
						\end{enumerate}
				\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\item \label{req:modificarAlmacenCentral}Requisito~\ref{req:modificarAlmacenCentral}: Modificar almacén central
				\begin{itemize}
					\item Descripción: Poder modificar los datos de una prenda de la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Código de prenda.
					\item Salida: Información sobre si la prenda se ha modificado correctamente o no
					\item Origen: \Gls{cuadroTexto} del programa (para el código), y posteriormente \glspl{cuadroTexto} con los datos de la prenda, para modificarlos; botón ``modificar prenda'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en uno de los \glspl{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Modificar una prenda en el almacén central.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: La prenda queda modificada en el almacén central. Se genera el albarán de entrega. En caso de modificarse el precio (por rebajas u otro descuento), se genera una nueva etiqueta.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el código introducido es erróneo o si la prenda no se ha podido modificar correctamente.
						\end{enumerate}
				\end{itemize}		


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\item \label{req:consultarAlmacenCentral}Requisito~\ref{req:consultarAlmacenCentral}: Consultar almacén central
				\begin{itemize}
					\item Descripción: Poder consultar los datos de una prenda de la base de datos.
					\item Prioridad: Alta
					\item Estabilidad: Alta
					\item Entrada: Código de prenda.
					\item Salida: Datos de la prenda.					
					\item Origen: \Gls{cuadroTexto} del programa (para el código), botón ``consultar prenda'' o tecla ``enter'' cuando el \gls{foco} de la aplicación está fijado en el \gls{cuadroTexto}.
					\item Destino: Sistema
					\item Necesita: Base de datos local.
					\item Acción: Consultar datos de una prenda del almacén central.
					\item Precondición: El empleado encargado de esta acción debe haber iniciado sesión previamente, el servidor local está iniciado y operativo.
					\item Postcondición: Se muestran los datos de la prenda por pantalla.
					\item Efectos laterales:
						\begin{enumerate}
							\item Ofrece reintentar la acción si el código introducido es erróneo o si la prenda no se ha podido encontrar o mostrar correctamente.
						\end{enumerate}
				\end{itemize}		
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
		\end{enumerate}
\section{Requisitos de rendimiento}
	\begin{itemize}
	\item El servidor central estará capacitado para recibir 10 peticiones simultáneas de los servidores locales de los establecimientos.
	\item La cantidad de datos que tendrá que manejar el servidor local será de 300 empleados, 50.000 clientes, 10.000 prendas (1.000 por temporada).
	\item La aplicación tendrá referenciados en un momento dado hasta 3000 entradas de las diversas tablas de la base de datos, asegurando con esto un funcionamiento fluido. Los datos de dichas entradas serán pedidos al servidor local en el momento en el que se seleccionen desde la aplicación.
	\item El servidor local debe soportar simultáneamente las peticiones de todos los terminales de la tienda con tiempos de respuesta a los mismos no superiores al segundo.
	\end{itemize}
\section{Requisitos lógicos}
	La base de datos contará con tablas, las cuales harán referencias entre ellas, resultando esto en un uso más eficiente de la memoria y una mejor búsqueda. Dichas tablas son:
	\begin{itemize}
	\item Prendas: Registra su código, precio, modelo, talla, color, diseñador, e imagen. Debe tener capacidad para al menos 10000 prendas diferentes, debido a que la misma prenda con ligeras variaciones genera una nueva entrada en dicha tabla. De esta manera guardamos aproximadamente las prendas de unas 10 temporadas para poder tener suficientes datos sobre qué compraron los clientes recientemente (intervalo de 5 años).
	\item Empleados: Registra contraseña, nombre, apellidos, nómina, puesto, departamento, ventas y foto. Debe tener capacidad para al menos 300 empleados, dando cabida a los que trabajan en un momento dado en la empresa, más contratos temporales y datos recientes sobre ex-empleados.
	\item Clientes: Guarda un perfil del cliente compuesto por nombre, email, teléfono, tienda habitual, y compras recientes. Tiene espacio para al menos 50000 clientes, para poder abastecer cualquier demanda de registro por parte de los clientes.
	\item Ventas: Registra los productos, empleados, y cliente involucrados en una venta. Tiene espacio para 200000 ventas, siendo capaz de guardar el histórico de al menos 5 años en cualquier momento.
	\item Tiendas: Registra toda la información referida al local y ubicación de la tienda. Tiene capacidad para al menos 100 tiendas.
	\end{itemize}

\section{Restricciones de diseño}
	\begin{itemize}
	\item El desarrollo del proyecto, siendo éste desarrollado con \gls{java} en su versión 1.7.0 del \gls{compilador} oficial de Oracle, está garantizado a funcionar tal como se concibió mientras se continúe el desarrollo con dicha plataforma. Si en algún momento se requiriera por parte del desarrollador o se desease por parte de la empresa cambiarlo, la funcionalidad e implementación podrán cambiar en un mínimo grado para adaptarse a modificaciones oficiales del \gls{compilador}.
	\item Asimismo, el entorno de desarrollo utilizado será \gls{eclipse} (Provisto desde la fundación \gls{eclipse}), y la aplicación no incorporará ninguna funcionalidad no implementable mediante el mismo. Cualquier cambio en el entorno de desarrollo que afectara a la aplicación será asumido por la empresa realizadora del proyecto con impacto mínimo (pero probable) sobre la funcionalidad del sistema.
	\item El sistema de bases de datos estará realizado sobre \gls{mysql}, restringiéndose la base de datos a las limitaciones derivadas de \gls{mysql}.
	\end{itemize}	
\section{Atributos del sistema software}
Hay una serie de atributos que se requieren en nuestro sistema.
		\begin{enumerate}
		\item Fiabilidad \\
			Para garantizar que nuestro programa realice sus funciones sarisfactoriamente, se trabaja siempre sobre la base de datos local para evitar conflictos entre terminales de venta.
			Además, el programa guarda localmente las últimas imágenes accedidas para evitar sobrecargar el servidor.
		\item Disponibilidad \\
			Entre los factores que grarantizan el funcionamiento del programa en el momento deseado están:
			\begin{itemize}
			\item El tiempo de búsqueda de productos, empleados o clientes en la aplicación será inferior a 1 segundo. (petición de búsqueda al servidor local)
			\item El servidor local debe ser capaz de enviar respuesta en menos de 1 segundo, extendiéndose hasta un máximo de 10 por posibles picos de carga.
			%%algo más?
			\end{itemize}
		\item Seguridad \\
			Para proteger el software de acesso accidental o malicioso, de uso, modificación, destrucción o publicación, en nuestro sistema 
			se utilizan los sistemas de encriptación \gls{RSA}-1024 para los datos de los clientes y empleados y \gls{RSA}-2048 para las contraseñas.
			Ante posibles pérdidas se realizarán copias de seguridad periódicas a un tercer disco duro de igual o mayor capacidad que el servidor central.
		\item Mantenimiento \\
			Se realizará mantenimiento correctivo (corregir errores), mantenimiento adaptivo (modificar el software de acuerdo con el entorno),
            mantenimiento perfectivo (añadir nueva funcionalidad que se ha visto que hace falta, este caso puede darse también por petición del cliente) y 
            mantenimiento preventivo en menor medida (consiste en cambiar el producto pensando en mejoras futuras).
			Siempre procurando mantener la facilidad de comprender, corregir, adaptar y mejorar el software.
		\item Portabilidad \\
			La facilidad de poner el software en otro servidor y/o sistemas operativos viene respaldada por:
			\begin{itemize}
			%\item Porcentaje del 00\% de componentes con código cliente-servidor.  %%%jnsjhsdjhas
			%\item Porcentaje de código del cliente-servidor. 
			\item Uso de un idioma portátil probado. 
			\item Uso de un \gls{compilador} particular o subconjunto de lenguajes. 
			\item Uso del sistema operativo WindowsXP o posterior.
			\end{itemize}
		\end{enumerate}